﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FindArbitrageConsole.Data.Model;


namespace FindArbitrageConsole
{
    public class CommonFuncs
    {
        public static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<IEnumerable<T>> collection)
        {
            if (!collection.Any())
                return new List<IEnumerable<T>> { Enumerable.Empty<T>() };

            var sequence = collection.First().ToList();
            return sequence.SelectMany(s => GetPermutations(collection.Skip(1)).Select(sq => new T[] { s }.Concat(sq)));
        }

        public static IEnumerable<IEnumerable<KefData>> GetPermutationsArbitrages(IEnumerable<IEnumerable<KefData>> collection)
        {
            //Все пересечения исходов
            var allCross = GetPermutations(collection);
            //Вилочные пересечения исходов
            var arbsCross = allCross.Where(arb => arb.Select(k=>1/k.KefValue).Sum() < 1);
            return arbsCross;
        }
    }
}
